﻿using Vtron.ATSP.Projector.Domain;

namespace Vtron.ATSP.Infrastructure
{
    /// <summary>
    /// Socket 消息处理接口
    /// </summary>
    /// <remarks>
    ///     <创建人>邓穗捷</创建人>
    ///     <创建时间>2014-08-21</创建时间>
    ///     <修订人></修订人>
    ///     <修订时间></修订时间>
    ///     <修订说明></修订说明>
    /// </remarks>
    public interface ISocketHandler
    {
        /// <summary>
        /// Socket 连接
        /// </summary>
        /// <param name="ip">Ip</param>
        /// <param name="port">端口号</param>
        /// <returns>
        /// 是否连接成功:
        ///     true 成功
        ///     flase 失败
        /// </returns>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        bool Connect(string ip, int port);

        /// <summary>
        /// Socket 消息处理
        /// </summary>
        /// <typeparam name="T">应答类型</typeparam>
        /// <param name="request">请求类</param>
        /// <param name="ip">请求Ip</param>
        /// <param name="port">请求端口</param>
        /// <returns>应答类</returns>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        T Handle<T>(MessageHead request, string ip, int port) where T : MessageHead, new();
    }
}
